# -*- coding: utf-8 -*-

"""
Nome do modulo: fase1.py
Autor: Soraia Janeiro
Data: 26/10/2013
Obs: leitura do ficheiro xls e escrita da bd.
"""

import xlrd
import sqlite3

"""
Lê ficheiro .xls
"""
def ler_ficheiro(ficheiro):
    # Abre o ficheiro
    xls = xlrd.open_workbook(ficheiro)
    
    # Acede à primeira folha do ficheiro
    pagina_dados = xls.sheets()[0]
    
    codigo_instituicao = ""
    codigo_curso = ""
    nome_instituicao = ""
    nome_curso = ""
    grau = ""
    vagas_iniciais = ""
    colocados = ""
    nota_ultimo_candidato = ""
    vagas_sobrantes = ""
    
    dados = []
    
    # Percorre o todas as linhas da folha
    for linha in range(3, pagina_dados.nrows - 2):
        
		xlinha = []
	
		if pagina_dados.cell(linha, 0).value != "":
			codigo_instituicao = pagina_dados.cell(linha, 0).value.encode('utf-8')
		xlinha.append(codigo_instituicao)
		
		if  pagina_dados.cell(linha, 1).value != "":
			codigo_curso = pagina_dados.cell(linha, 1).value.encode('utf-8')
		xlinha.append(codigo_curso)
		
		if  pagina_dados.cell(linha, 2).value != "":
			nome_instituicao = pagina_dados.cell(linha, 2).value.encode('utf-8')
		xlinha.append(nome_instituicao)
		
		if  pagina_dados.cell(linha, 3).value != "":
			nome_curso = pagina_dados.cell(linha, 3).value.encode('utf-8')
		xlinha.append(nome_curso)
		
		if  pagina_dados.cell(linha, 4).value != "":
			grau = pagina_dados.cell(linha, 4).value.encode('utf-8')
		xlinha.append(grau)
		
		xlinha.append(pagina_dados.cell(linha, 5).value)
		
		xlinha.append(pagina_dados.cell(linha, 6).value)
	
		if  pagina_dados.cell(linha, 7).value == "":
			nota_ultimo_candidato = "0"
			xlinha.append(nota_ultimo_candidato)
		else:
			xlinha.append(pagina_dados.cell(linha, 7).value)
		
		xlinha.append(pagina_dados.cell(linha, 8).value)
		
		dados.append(xlinha)
		pass
    return dados

"""   
O método executa a criação da base de dados
É efectuada a criação de uma tabela com todos os dados.  
"""
def criar_bd(ficheiro):
       # Abre o ficheiro
		xls = xlrd.open_workbook(ficheiro)
    
		# Acede à primeira folha do ficheiro
		pagina_dados = xls.sheets()[0]
		       
		conn = sqlite3.connect('Inscritos.db')
		cursor = conn.cursor()
		for coluna in range(0, pagina_dados.ncols):
			cursor.execute('''drop table if exists Inscritos''')
			cursor.execute ('''create table if not exists Inscritos 
			(Chave INTEGER, 
			Codigo_Instituicao INTEGER, Codigo_Curso INTEGER, 
			Nome_Instituicao TEXT, Nome_Curso TEXT, 
			Grau TEXT, Vagas_Iniciais INTEGER, Colocados INTEGER, 
			Nota_Ultimo_Candidato INTEGER, 
			Vagas_Sobrantes INTEGER)''')
			cursor.execute('''drop table if exists Distritos''')
			cursor.execute ('''create table if not exists Distritos 
			(Codigo_Distrito INTEGER, 
			Nome_Distrito TEXT)''')
			pass
		escrever_bd(conn, cursor)
		escrever_distritos(conn, cursor)
		separar_institutos_escolas(conn, cursor)
		alunos_por_instituicao()
		conn.commit()
		cursor.close()
		pass

"""
O método escreve os dados na base de dados criada.
Atribui valores aos campos da base de dados.
"""
def escrever_bd(conn, cursor):
	conteudo_xls = ler_ficheiro('cna131fresultados.xls')
	chave = 1
	for linha in conteudo_xls:
		cursor.execute('''insert into Inscritos 
		(Chave, Codigo_Instituicao, Codigo_Curso, 
		Nome_Instituicao, Nome_Curso, Grau, Vagas_Iniciais, Colocados, 
		Nota_Ultimo_Candidato, 
		Vagas_Sobrantes)values("{0}",
		"{1}","{2}","{3}","{4}","{5}","{6}",
		"{7}","{8}","{9}")'''.format(chave, 
									linha[0], 
									linha[1], 
									linha[2], 
									linha[3], 
									linha[4], 
									linha[5], 
									linha[6], 
									linha[7], 
									linha[8]))
		chave += 1
		pass
	pass

def escrever_distritos(conn, cursor):
	lista_distritos = ('Lisboa', 'Porto', 'Setúbal', 'Braga', 'Aveiro',
	'Leiria', 'Santarém', 'Faro', 'Coimbra', 'Viseu', 'Madeira', 'Açores',
	'Viana do Castelo', 'Vila Real', 'Castelo Branco', 'Évora',
	'Guarda', 'Beja', 'Bragança', 'Portalegre')
	for x in range(0, 20):
		cursor.execute('''insert into Distritos values({0}, "{1}")'''.format(x + 1, lista_distritos[x]))

def separar_institutos_escolas(conn, cursor):

	
	cursor.execute('''SELECT DISTINCT Nome_Instituicao FROM Inscritos ''')
	dados_bd = cursor.fetchall()
	print dados_bd

	for linha in range(0, len(dados_bd)):
		nome = dados_bd[linha][0]
		nome = nome.split('-')[0]
		

	return dados_bd    


def alunos_por_instituicao():
	'''
	Calcula o número de alunos colocados por instituição
	'''
	cursor.execute('''SELECT * FROM Inscritos ''')
	dados_bd = cursor.fetchall()
	for linha in range(0, len(dados_bd)):
		if dados_bd[linha][1].value == dados_bd[linha][1].value:
			print dados_bd
	
	
#Executa o método      
criar_bd('cna131fresultados.xls')

       



